package com.hanxiaozhang.annotation;


import com.hanxiaozhang.constant.LockCategory;
import com.hanxiaozhang.constant.LockTypeEnum;

import java.lang.annotation.*;
import java.util.concurrent.TimeUnit;

/**
 * 功能描述: <br>
 * 〈锁注解〉
 *
 * @Author: hanxinghua
 * @Date: 2023/7/19
 */
@Inherited
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Lock {

    /**
     * 加锁key前缀
     */
    String keyPrefix();

    /**
     * 加锁key的值el表达式
     */
    String keyEl();

    /**
     * 获取锁失败时的提示信息
     */
    String lockFailedMsg() default "加锁失败";

    /**
     * 锁的类型，默认排他锁
     */
    LockTypeEnum lockType() default LockTypeEnum.EXCLUSIVE_LOCK;

    /**
     * 锁的种类，默认Redis锁
     */
    LockCategory lockCategory() default LockCategory.REDIS;

    /**
     * 等待时长，默认-1，一直等待
     */
    long waitTime() default -1;

    /**
     * 等待时长单位，默认秒
     */
    TimeUnit waitTimeUnit() default TimeUnit.SECONDS;


}
